package com.wll.design.责任链.controller;

import cn.hutool.http.HttpResponse;
import com.wll.design.责任链.config.ChainPatternConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @ClassName: ZRTestController.java
 * @author: wanglulu
 * @version: 1.0.0
 * @Description:
 *
 * 责任链 设计模式
 *
 *  * 参考地址
 *  * https://mp.weixin.qq.com/s/Pb1LoP1Do4y3aL4-4UXk7w
 *
 * 责任链模式为请求创建了一个接收者对象的链。执行链上有多个对象节点，每个对象节点都有机会（条件匹配）处理请求事务，
 * 如果某个对象节点处理完了，就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。
 * 这种模式给予请求的类型，对请求的发送者和接收者进行解耦。
 *
 * 2.3 责任链模式使用
 * 责任链模式怎么使用呢？
 *
 * 一个接口或者抽象类
 * 每个对象差异化处理
 * 对象链（数组）初始化（连起来）
 *
 * 2.3.1 一个接口或者抽象类
 * 这个接口或者抽象类，需要：
 *
 * 有一个指向责任下一个对象的属性
 * 一个设置下一个对象的set方法
 * 给子类对象差异化实现的方法（如以下代码的doFilter方法）
 *
 *
 * 案例： 订单校验

 * @createTime: 2021/11/25 14:02
 */
@RestController
@RequestMapping("/test/")
public class ZRTestController {


    @Autowired
    ChainPatternConfig chainPatternConfig;

    /**
     * 测试责任链
     * @param request
     * @param response
     */
    @RequestMapping("check/data")
    public void test(HttpServletRequest request, HttpServletResponse response){
        chainPatternConfig.exce(request, response);
        System.out.println("====== test success ========");
    }
}
